//
//  PictureCollectionView.swift
//  新浪微博项目
//
//  Created by 王炯 on 16/7/25.
//  Copyright © 2016年 王炯. All rights reserved.
//

import UIKit

//显示图片的collectionView
//可以在UICollectionView的子控件中遵守代理及实现数据源方法！！！
class PictureCollectionView: UICollectionView
{
    
    //创建一个PictureModel模型数组，用于接收外部传来的图片数组，根据此图片数组的信息来重新布局当前的collectionView
    var modelArray:[PictureModel]?
    {
        didSet{
            
            let count:Int = modelArray?.count ?? 0
            
            
            //根据配图的数量来重新布局当前collectionView的size
            let ViewSize = GetViewSize(count)
            
            
            //self.bounds.size = ViewSize
            //获取真正Size之后，重新update一下当前View的Size约束
            self.snp_updateConstraints { (make) in
                make.size.equalTo(ViewSize)
            }
            reloadData()
            
        }
    }
    
    //根据modelArray的count数来计算当前collecTionView的总体Size
    func GetViewSize(count:Int) -> CGSize
    {
        //计算collectionView的总体行数和列数
        //列数
        //当总数为4时，设置为两列；总数不为4时，列数最大为3
        let col = count == 4 ? 2 : (count >= 3 ? 3 : count)
        //行数
        //当总数为4时，设置为两行;当总数不为4时，行数为(count - 1)/3 +1
        let row = count == 4 ? 2 : ((count - 1)/3+1)
        
        //计算size的高度和宽度
        let w = CGFloat(col) * homePicWandH + CGFloat(col - 1)*homePicMargin
        let h = CGFloat(row) * homePicWandH + CGFloat(row - 1)*homePicMargin
        
        return CGSizeMake(w, h)
    }
    
    
    

    //重写CollectionView的init方法，并在这上面重新设置view的布局
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout)
    {
        //利用流水布局重新设置collectionView
        super.init(frame: frame, collectionViewLayout: UICollectionViewFlowLayout())
        
        //重新布局界面
        self.setUpUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setUpUI()
    {
        //设置背景颜色为clearColor
        self.backgroundColor = UIColor.clearColor()

        
        //(1)获取layout,并设置layout布局
        let layout = self.collectionViewLayout as! UICollectionViewFlowLayout
        
        //设置itemSize的大小
        layout.itemSize = CGSizeMake(homePicWandH, homePicWandH)
        
        // 设置水平和垂直间距
        layout.minimumInteritemSpacing = homePicMargin
        layout.minimumLineSpacing = homePicMargin
        
        //设置数据源和代理(这都可以??）
        self.dataSource = self
        self.delegate = self
        
        //注册cell
        self.registerClass(PicViewCell.self, forCellWithReuseIdentifier: "picCell")
        
    }
    
}

//实现collectionView的数据源方法
extension PictureCollectionView:UICollectionViewDataSource
{
    //(1)组
    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
    {
        return 1
    }
    
        //(2)item
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return self.modelArray?.count ?? 0
    }
    //(3)item的内容
   func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
    {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("picCell", forIndexPath: indexPath) as! PicViewCell
        
        //把相关图片赋值给cell
        //此时可以进行强行解包!!1(因为上面的代理方法已经可以确定有值了)
        cell.picModel  = self.modelArray![indexPath.item]
        
        
        return cell;
    }
}
//实现点击cell之后的触发事件
extension PictureCollectionView:UICollectionViewDelegate
{
    //利用第三方框架SDPhotoBrowser实现点击cell之后，图片放大
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
    {
        //OC的代码:
        //        SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
        //        photoBrowser.delegate = self;
        //        photoBrowser.currentImageIndex = indexPath.item;
        //        photoBrowser.imageCount = self.modelsArray.count;
        //        photoBrowser.sourceImagesContainerView = self.collectionView;
        //
        //        [photoBrowser show];
        
        let photoBrowser = SDPhotoBrowser()
        
        photoBrowser.delegate = self
        
        //当前选中的图片索引
        photoBrowser.currentImageIndex = indexPath.item
        //总图数
        photoBrowser.imageCount = self.modelArray?.count ?? 0
        //父控件
        photoBrowser.sourceImagesContainerView = self
        //显示图片
        photoBrowser.show()
    }
}
//实现第三方框架SDPhotoBrowser的代理方法
extension PictureCollectionView:SDPhotoBrowserDelegate
{
    //实现显示小图和高清图的代理方法
    //(1)小图
    func photoBrowser(browser: SDPhotoBrowser!, placeholderImageForIndex index: Int) -> UIImage!
    {
        //(1)根据index(item)获取cell
        let cell = self.cellForItemAtIndexPath(NSIndexPath(forItem: index, inSection: 0)) as! PicViewCell
        
        //(2)返回cell上的图片
        return cell.picImage.image
    }

    //(2)高清图
    func photoBrowser(browser: SDPhotoBrowser!, highQualityImageURLForIndex index: Int) -> NSURL!
    {
        //返回cell上的图片响应的图片地址
        var urlStr = self.modelArray![index].thumbnail_pic!
        
        //字符转换
        urlStr = urlStr.stringByReplacingOccurrencesOfString("thumbnail", withString: "bmiddle")
        
        //返回url
        return NSURL(string: urlStr)
    }
}